/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.config.service;

import com.icinfo.cloud.provider.punish.approval.vo.CaseApprovalCenterInfoVo;
import com.icinfo.cloud.provider.punish.approval.vo.LineTerritoryInfoVo;
import com.icinfo.cloud.provider.punish.config.dto.ConfigDeptParamDto;
import com.icinfo.cloud.provider.punish.config.dto.ConfigDeptParamRequest;
import com.icinfo.cloud.provider.punish.config.dto.ConfigDeptSpecialParamDto;
import com.icinfo.cloud.provider.punish.config.model.SysDepartParam;
import com.icinfo.cloud.provider.punish.config.vo.ConfigDeptParamKeyInfoVo;
import com.icinfo.cloud.provider.punish.config.vo.ConfigDeptParamVo;
import com.icinfo.cloud.provider.punish.config.vo.LineCaseHandleInfoVo;
import com.icinfo.cloud.provider.punish.ucase.caseadditional.dto.CaseAdditionalRecordDto;
import com.icinfo.cloud.xzcf.provider.member.org.model.MemberOrg;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.util.List;

/**
 * 描述: 部门参数 sys_depart_param 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年03月24日
 */
public interface ISysDepartParamService extends BaseService {
    /**
     * 根据机构编码获取部门参数
     *
     * @param orgCode
     * @param deptCode
     * @return {@link SysDepartParam}
     * @author liyafeng
     * @date 2022/3/31
     */
     SysDepartParam getSysDepartParamByOrgCode(String orgCode,String deptCode);

    /**
     * 【V2.0.0】描述：查询已配置的部门信息列表
     *
     * @return {@link List<ConfigDeptParamKeyInfoVo>} 已配置的部门关键信息列表
     * @author xiangyuyu
     * @date 2022-05-16 16:16
     */
    List<ConfigDeptParamKeyInfoVo> getExistsDeptKeyInfoList();

    /**
     * 【V2.0.0】描述：根据指定条件查询部门参数配置信息
     *
     * @param request {@link ConfigDeptParamRequest}
     * @return {@link Result<ConfigDeptParamVo>} 部门参数配置信息
     * @author xiangyuyu
     * @date 2022-05-16 16:16
     */
    ConfigDeptParamVo getDeptConfigInfoWithSpecialCondition(ConfigDeptParamRequest request);

    /**
     * 【V2.0.0】描述：保存部门基本参数配置信息
     *
     * @param saveDto {@link ConfigDeptParamDto}
     * @return {@link Result <String>} 保存结果
     * @author xiangyuyu
     * @date 2022-05-16 16:16
     */
    Result<String> saveDeptBasicConfigInfo(ConfigDeptParamDto saveDto);

    /**
     * 【V2.0.0】描述：保存部门指定配置信息
     *
     * @param saveDto {@link ConfigDeptSpecialParamDto}
     * @return {@link Result<String>} 保存结果
     * @author xiangyuyu
     * @date 2022-05-16 16:16
     */
    Result<String> saveDeptSpecialConfigInfo(ConfigDeptSpecialParamDto saveDto);


    /**
     * 描述：将条线配置组装成集合对象
     *
     * @param lineConfig 条线配置（json字符串）
     * @return {@link List<LineCaseHandleInfoVo>} 组装好的条线配置集合
     * @author xiangyuyu
     * @date 2022-05-20 14:21
     */
    List<LineCaseHandleInfoVo> assembleLineConfigToList(String lineConfig);

    /**
     * 【V2.0.0】描述：查询案件联合法制审核相关信息
     *
     * @param caseId 案件id
     * @return {@link CaseApprovalCenterInfoVo} 案件联合法制审核相关信息
     * @author tianrunjia
     * @date 2022-05-24 20:21
     */
    CaseApprovalCenterInfoVo getIsApprovalCenterConfig(String caseId);

    /**
     * 描述：根据机构编码获取部门条线信息
     *
     * @param orgCode 组织代码
     * @return {@link List<LineCaseHandleInfoVo> }
     * @author shishengyao
     * @date 2022/06/28
     */
    List<LineTerritoryInfoVo> getLineInfoListByOrgCode(String orgCode);

    /**
     * 描述：根据机构编码和条线编码查询条线信息
     *
     * @param orgCode  组织代码
     * @param lineCode 行代码
     * @return {@link LineTerritoryInfoVo }
     * @author shishengyao
     * @date 2022/06/28
     */
    LineTerritoryInfoVo getLineInfoByOrgCodeAndLineCode(String orgCode,String deptCode, String lineCode);

    /**
     * 描述: 根据登录人部门查询条线配置
     *
     * @return java.lang.String
     * @author zhanghongqiang
     * @Date 2022/10/28
     */
    List<String> getDeptLineConfig();

    /**
     * 描述：根据org查询国标区划编码
     *
     * @param orgCode 机构编码
     * @return 国标区划编码
     * @author xiangyuyu
     * @date 2022/11/30
     * @since
     */
    String getGbOrgInfo(String orgCode);

    /**
     * 无效机构配置信息
     * @author liyafeng
     * @date 2022/11/23
      * @param request
     * @return {@link int}
     */
    int invalidSysDepartParam(ConfigDeptParamRequest request);
    /**
     *根据部门编码与机构编码获取对应的参数配置
     * @author liyafeng
     * @date 2022/11/23
      * @param orgCode
     * @param deptCode
     * @return {@link SysDepartParam}
     */
    SysDepartParam getSysDepartParamByOrgCodeAndDeptCode(String orgCode,String deptCode);
    /**
     * 根据部门编码查询部门信息
     * @author wangfawei
     * @date 2022-12-09
     * @param recordDto
     * @return {@link SysDepartParam}
     */
    Result<SysDepartParam> getSysDepartParam(CaseAdditionalRecordDto recordDto);

    LineTerritoryInfoVo getLineInfoByOrgCodeAndLineCodeNumber(String caseOrgCode, String caseDeptCode, String lineCode);
}
